/******************************************************************************\
*                                                                              *
*     File: Huwelijk_test.cc                                                   *
*                                                                              *
*   Author: Jan Meuleman / Douwe A. van Twillert                               *
*  Purpose: de testen voor de klasse Huwelijk                                  *
*  Version: 1.0      TWI 20080217                                              *
*           - initiele versie                                                  *
*                                                                              *
\******************************************************************************/

#include "TestSet.hpp"

#include "Huwelijk.h"
#include "Persoon.h"

Persoon* alex = new Persoon("Willem-Alexander", 1967, MANNELIJK);
Persoon* maxima = new Persoon("Maxima", 1971, VROUWELIJK);
Persoon* jonge_jongen = new Persoon("Jim", 1999, MANNELIJK);
Persoon* jong_meisje = new Persoon("Kim", 2001, VROUWELIJK);

TEST_SET( PersonConstructorTests );


// goed huwelijk, maar verder nog geen controles
TEST(HuwelijkConstructorTestGood1)
    CHECK( alex != 0 );
    CHECK( maxima != 0 );

    Huwelijk* sprookje = new Huwelijk(alex, maxima, 2002);
    CHECK( sprookje != 0 );

    delete sprookje;
END_TEST


// mogen nog niet getrouwd worden
TEST(PersonConstructorTestFailure1)
    CHECK( jonge_jongen != 0 );
    CHECK( jong_meisje != 0 );

    EXPECT_SYSTEM_ASSERTION_FAILED;
    Huwelijk* huwelijk = new Huwelijk(jonge_jongen, jong_meisje, 2008);
    EXPECT_NOT_REACHED;

    delete huwelijk;
END_TEST


// geefPartner() kan pas woredn getest bij aanmaken huwelijk
TEST(HuwelijkGeefPartnerTestGoed1)
    CHECK( alex != 0 );
    CHECK( maxima != 0 );

    Huwelijk* sprookje = new Huwelijk(alex, maxima, 2002);
    CHECK( sprookje != 0 );
    CHECK( alex->geefPartner() == maxima ); 
    CHECK( maxima->geefPartner() == alex ); 

    delete sprookje;
END_TEST


TEST(HuwelijkVoegKindToeTestGoed1)
    CHECK( alex != 0 );
    CHECK( maxima != 0 );
    CHECK( jong_meisje != 0 );

    Huwelijk* sprookje = new Huwelijk(alex, maxima, 2002);
    CHECK( sprookje != 0 );
    sprookje->maakBaby(jong_meisje); 

    delete sprookje;
END_TEST


TEST(HuwelijkVoegKindToeTestFout1)
    CHECK( alex != 0 );
    CHECK( maxima != 0 );
    CHECK( jonge_jongen != 0 );

    EXPECT_SYSTEM_ASSERTION_FAILED;

    Huwelijk* sprookje = new Huwelijk(alex, maxima, 2002);
    CHECK( sprookje != 0 );
    sprookje->maakBaby(jonge_jongen);
    sprookje->maakBaby(jong_meisje);
    EXPECT_NOT_REACHED;

    delete sprookje;
END_TEST


int main()
{
    return TestSet_execute();

    delete alex;
    delete maxima;
    delete jonge_jongen;
    delete jong_meisje;
}

